#ifndef QLSPLUGINSMANAGERPOOL_H
#define QLSPLUGINSMANAGERPOOL_H

#include <QObject>
#include <QMutex>

#include "qls_plugins_manager_global.h"

class QLsPluginsManager;

/**
 * @brief The QLsPluginsManagerPool class：插件管理器连接池
 * 根据插件路径划分插件管理器
 * 主要接口：
 *	1. QLsPluginsManager *GetPluginsManagerByPluginsDir(const QString
 *&pluginsDir);
 *		在现有插件管理器中匹配插件路径，如果没有，则创建新的插件管理器进入连接池，并返回该插件管理器
 *	2. QList<QLsPluginsManager *> getPluginsManagerList() const;
 *		当前存在的 插件管理器 列表
 */
class QLS_PLUGINS_MANAGER_EXPORT QLsPluginsManagerPool : public QObject
{
    Q_OBJECT
public:
    explicit QLsPluginsManagerPool(QObject *parent = nullptr);

    /* 唯一实例 */
    static QLsPluginsManagerPool &GetInstance();

    /* 当前存在的 插件管理器 列表 */
    QList<QLsPluginsManager *> getPluginsManagerList() const;

    /* 获取插件管理器 */
    QLsPluginsManager *GetPluginsManagerByPluginsDir(const QString &pluginsDir);

    /* 销毁插件管理器 */
    void DestroyPluginsManager(QLsPluginsManager *pluginsManager);

private:
    QList<QLsPluginsManager *>
        m_pluginsManagerList; /* 当前存在的 插件管理器 列表 */

    /* instance */
    static QMutex m_instanceMutex;
    static QLsPluginsManagerPool *m_instance;
};

#endif // QLSPLUGINSMANAGERPOOL_H
